using System;
using System.Collections.ObjectModel;

using octalforty.Componento.Core.ObjectModel;

namespace octalforty.Componento.Core.Framework
{
    /// <summary>
    /// 
    /// </summary>
    /// <remarks>
    /// Resource Providers are used to download or otherwise transform package resources. The URIs
    /// returned from <see cref="GetResourceUris"/> are then handled by an appropriate <see cref="IPackageResourceInstaller"/>.
    /// </remarks>
    public interface IPackageResourceProvider
    {
        /// <summary>
        /// Returns a collection of all URI schemas supported by this <see cref="IPackageResourceProvider"/>.
        /// </summary>
        /// <remarks>
        /// <see cref="SupportedSchemas"/> must return lower-cased schema names.
        /// </remarks>
        ReadOnlyCollection<string> SupportedSchemas
        { get; }

        Uri[] GetResourceUris(PackageManifest package, Uri resourceUri);
    }
}